package com.wcj.doublepoints.first;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

/**
 * 给定长度为 2n 的整数数组 nums ，你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ，使得从 1 到 n 的 min(ai, bi) 总和最大。
 *
 * 返回该 最大总和 。
 *
 * 输入：nums = [1,4,3,2]
 * 输出：4
 * 解释：所有可能的分法（忽略元素顺序）为：
 * 1. (1, 4), (2, 3) -> min(1, 4) + min(2, 3) = 1 + 2 = 3
 * 2. (1, 3), (2, 4) -> min(1, 3) + min(2, 4) = 1 + 2 = 3
 * 3. (1, 2), (3, 4) -> min(1, 2) + min(3, 4) = 1 + 3 = 4
 * 所以最大总和为 4
 */
public class 数组拆分I {

    public static void main(String[] args) {
        int[] nums = {1,4,3,2};
        int i = arrayPairSum(nums);
        System.out.println(i);
    }

    /**
     * 题目理解错误
     * @param nums
     * @return
     */
    public static int arrayPairSum(int[] nums) {
        ArrayList<int[]> tmp = new ArrayList<int[]>();
        Arrays.sort(nums);
        for (int i = 0; i < nums.length - 1;i++){
            for (int j = i + 1; j < nums.length; j++){
                tmp.add(new int[]{nums[i],nums[j]});
            }
        }
        for (int[] ints : tmp) {
            for (int anInt : ints) {
                System.out.print(anInt);
            }
            System.out.println("\n");
        }
        int max = 0;
        for (int x = nums.length - 1; x > nums.length/2;x--){
            int[] ints = tmp.get(x);
            max += ints[0];
        }
        return max;
    }

    /**
     * 正解，并不是排列组合，而是把，n个数分成n/2组
     * @param nums
     * @return
     */
    public static int arrayPairSum1(int[] nums) {
        Arrays.sort(nums);
        int max = 0;
        for (int i = 0; i < nums.length; i += 2){
            max += nums[i];
        }
        return max;
    }
}
